package java_learn.java_web.基础增强.注解.annotation.demo;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 *  * 简单的测试框架
 *  *
 *  * 当主方法执行后，会自动自行被检测的所有方法(加了Check注解的方法)，判断方法是否有异常，记录到文件中
 * @Author: 李浩然
 * @Date: 2021/5/31 12:03 下午
 */
public class TestCheck {
    public static void main(String[] args) throws IOException {
        //1.创建计算器对象
        Calculator calculator=new Calculator();
        //2.获取字节码对象
        Class cls=calculator.getClass();
        //3.获取所有方法
        Method[] methods=cls.getMethods();
        int num=0;
        BufferedWriter bw=new BufferedWriter(new FileWriter("bug.txt"));
        for(Method method:methods){
            //4.判断
            if(method.isAnnotationPresent(Check.class)){
                try {
                    method.invoke(calculator);
                } catch (Exception e) {
                    e.printStackTrace();
                    num++;
                    bw.write(method.getName()+"出异常了");
                    bw.newLine();
                    bw.write("异常的名称"+e.getCause().getClass().getSimpleName());
                    bw.newLine();
                    bw.write("异常的原因:"+e.getCause().getMessage());
                    bw.newLine();
                    bw.write("--------------------------");
                    bw.newLine();
                }
            }
        }
        bw.write("本次测试一共出现"+num+"次错误");
        bw.flush();
        bw.close();
    }
}
